package top.kaoshanji.p3ch12a;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * author kaoshanji
 * ^_^
 * create time 2025/2/6 18:03
 */
public class TypeInference {

    // 代码清单-p3ch12a-397页a：用来说明类型推断的非泛型类中的泛型方法
    public <T> T method(T obj) {
        return obj;
    }

    public <T> List<T> createList() {
        return new ArrayList<>();
    }

    public static void main(String[] args) {

        // 代码清单-p3ch12a-398页c：基于实际参数的静态类型的类型推断的示例
        TypeInference typeInference = new TypeInference();
        typeInference.method("Hello");

        // 代码清单-p3ch12a-398页d：基于赋值操作的变量类型的类型推断的示例
        List<Integer> list2 = typeInference.createList();

        // 代码清单-p3ch12a-399页a：通过临时变量来允许编译器进行类型推断的示例
        List<Object> list1 = typeInference.method(typeInference.createList());

        List<Integer> list3 = typeInference.method(list2);

        // 代码清单-p3ch12a-399页c：使用<>操作符简化泛型类型的对象创建
        List<String> list = new ArrayList<>();
        Map<List<? extends Number>, Map<String, Long>> map = new HashMap<>();

    }

}
